home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / ms_dos / if2 / if2.c next >
C/C++ Source or Header  |  1993-07-08  |  3KB  |  111 lines

  1. /* まだまだ動かないけど、ディレクトリ移動は未サポートだけど、形にはなったバージョン(でもこういう形には10月からなっていたんだ。ぐすん。SYSTEM関数がうまく動かないんだよ~。98ではきちんとコンパイル出来るのに)V.0.1 92/12/30 wed */
  2.  
  3. /* ひゃっほ~!動いたよ~ん。やったー!!!すげぇ~。 V.1.00 93/1/10 SUN */
  4. /* ちょっとした手直し・・・・                            V.1.02 93/2/04 TUE */
  5.  
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9.  
  10. void if2_check(char f_name[], char drv[]);
  11. void if2_exec(char if2_file[], char f_name[]);
  12.  
  13. void main( int argc, char *argv[] )
  14. {
  15.     char f_name[32],drv[16];
  16.     
  17.     if ( !( argc == 2 || argc == 3))
  18.     {
  19.         printf ("Usage : IF2 [op.] data_file_name.???\n");
  20.         exit(1);
  21.     }
  22.     
  23.     if ( argc == 3)
  24.     {
  25.         strcpy(drv,argv[1]);
  26.         sscanf(argv[2],"%32s",f_name); /* argv[2] からファイル名を取得 */
  27.     }
  28.     else if ( argc == 2)
  29.     {
  30.         strcpy(drv,"D:");
  31.         sscanf(argv[1],"%32s",f_name); /* argv[1] からファイル名を取得 */
  32.     }
  33.     
  34.     if2_check(f_name,drv);
  35. }
  36.  
  37. void if2_check(char f_name[], char drv[])
  38. {
  39.     int n;
  40.     char if2_file[128];
  41.     FILE *tmpstr;
  42.     char ex_1[4],ex_2[4];  /* 拡張子用の配列 */
  43.     for( n =0; n <= 31; n++) /* 入力ファイルの拡張子の取得 */
  44.     {
  45.         if (f_name[n] == '.')
  46.         {
  47.             sscanf(f_name+n+1,"%3s",ex_1);
  48.             break;
  49.         }
  50.     }
  51.     
  52.     strcat(drv,"\\TMENU.IF2");
  53.     
  54.     if ((tmpstr = fopen(drv,"r")) == NULL)
  55.     {
  56.         printf("ファイルが開けへんかったわ。ごめんねぇ。\n");
  57.         exit(1);
  58.     }
  59.     
  60.     for (; fgets(if2_file,128,tmpstr);)
  61.     {
  62.         sscanf(if2_file,"%3s",ex_2); /* IF2からの拡張子の取得 */
  63.         if ( 0 == stricmp(ex_1,ex_2)) /*拡張子の比較 大文字小文字の区別なし*/
  64.         {
  65.             fclose(tmpstr);
  66.             if2_exec(if2_file,f_name);
  67.             break;
  68.         }
  69.         else 
  70.             continue;
  71.     }
  72. }
  73.  
  74. void if2_exec(char if2_file[], char f_name[])
  75. {
  76.     int i = 0,f,n;
  77.     char buff[128],tmp[128] = "RUN386.EXE ";
  78.     
  79.     for ( i=10, f=0; '\n' != if2_file[i]; i++, f++) 
  80.             buff[f] = if2_file[i];
  81.     
  82.     buff[f] = ' '; /* ファイル名の連結がうまくいくおまじない。 */
  83.     buff[f+1] = '\0'; /* ナル文字の追加。 f+n+1 が buff の最後*/
  84.     
  85.     printf("%s\n",strcat(buff,f_name)); /*ファイル名の付加*/
  86.     
  87.     if ( if2_file[5] == '0') /* EXE,COM,BAT のチエック */
  88.     {
  89.         strcat(tmp,buff); /* RUN386 をつける。 */
  90.         system(tmp); /* 起動するはず・・・ */
  91.     }
  92.     
  93.     else if( if2_file[5] == '1') /* こちらがリアルモード用の処理 */
  94.     {
  95.         /* CONSOLE.EXE や ORICON.EXE を抜く */
  96.         for ( i = 10;; i++) 
  97.         {
  98.             if ( buff[i] == ' ' && buff[i+2] == ':')
  99.             {
  100.                 for( n = i+1, f = 0; buff[n] != '\0'; n++, f++)
  101.                     tmp[f] = buff[n];
  102.                 tmp[f] = '\0';
  103.                 break;
  104.             }
  105.         }
  106.         printf("%s\n",tmp);
  107.         system(tmp);
  108.     }
  109. }
  110.  
  111.